// Constantes con separadores de cifras
var VAL_SEPARADOR_MILES     = ".";
var VAL_SEPARADOR_DECIMALES = ",";
var vbCr = "\r";
var vbLf = "\n";
var vbCrLf = vbCr+vbLf;
var vbTab = "\t";
var CARACTERES_NO_VALIDOS  = "<|>"; // se usa "|" para separar los caracteres y usar este string como expresion regular
var CARACTERES_NO_VALIDOS_SIN_SEPARADOR = CARACTERES_NO_VALIDOS.replace(/\|/g," ");
var CONST_COMBO_VACIO = "-100";

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida si un objeto es vacio
function IsValid_Empty( a_objeto ) {
  //"Combo"
  if (a_objeto.type == "select-one") {
    if (a_objeto.selectedIndex < 0)  return( true );
    return( ( RTrim( LTrim( a_objeto.options[a_objeto.selectedIndex].value ) ) == "" ) ? true : false );
  }

  //"Listbox"
  if (a_objeto.type == "select-multiple") {
    if (a_objeto.selectedIndex < 0)  return( true );
    return( ( RTrim( LTrim( a_objeto.options[a_objeto.selectedIndex].text ) ) == "" ) ? true : false );
  }

  //"Editbox"
  return( ( RTrim( LTrim( a_objeto.value ) ) == "" ) ? true : false )
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida si un objeto es vacio
function IsValid_ComboVacio( a_objeto ) {

  if (a_objeto.selectedIndex < 0)  return( true );
  return( ( RTrim( LTrim( a_objeto.options[a_objeto.selectedIndex].value ) ) == CONST_COMBO_VACIO ) ? true : false );

}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida que el valor del objeto sea un mail
function IsValid_EMail( a_objeto ) {
  //Vacio
  if( IsValid_Empty( a_objeto ) )  return( false );

  //Strings de expresiones regulares: username y hostname
  var ExpresionRegular1_Str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
  var ExpresionRegular2_Str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";

  //Objetos expresiones regulares
  var ExpresionRegular1 = new RegExp( ExpresionRegular1_Str );
  var ExpresionRegular2 = new RegExp( ExpresionRegular2_Str );

  //Retorna
  if (a_objeto.type == "select-one") {
    return( !ExpresionRegular1.test( a_objeto.options[a_objeto.selectedIndex].text )  &&
      ExpresionRegular2.test( a_objeto.options[a_objeto.selectedIndex].text ) );
  }
  else if (a_objeto.type == "select-multiple") {
    return( !ExpresionRegular1.test( a_objeto.options[a_objeto.selectedIndex].text )  &&
      ExpresionRegular2.test( a_objeto.options[a_objeto.selectedIndex].text ) );
  }
  else
    return( !ExpresionRegular1.test( a_objeto.value )  &&
      ExpresionRegular2.test( a_objeto.value ) );
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida que el valor del objeto sea un mail
function IsValid_TextoEmail( texto ) {
  //Vacio
  if( texto=="" )  return( true );

  //Strings de expresiones regulares: username y hostname
  var ExpresionRegular1_Str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
  var ExpresionRegular2_Str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";

  //Objetos expresiones regulares
  var ExpresionRegular1 = new RegExp( ExpresionRegular1_Str );
  var ExpresionRegular2 = new RegExp( ExpresionRegular2_Str );

  //Retorna
  return( !ExpresionRegular1.test( texto )  &&
    ExpresionRegular2.test( texto ) );
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida si un numero es entero
function IsValid_NumberInt( a_objeto ) {
  //Vacio
  if( IsValid_Empty( a_objeto ) )  return( false );

  //Strings de expresiones regulares
  //var ExpresionRegular_Str = "^(([0-9]+)|([0-9]{1,3}(\\" + VAL_SEPARADOR_MILES + "[0-9][0-9][0-9])*))$"
  var ExpresionRegular_Str = "^(([0-9]+)|([0-9]{1,3}(\\[0-9][0-9][0-9])*))$"

  //Objetos expresiones regulares
  var ExpresionRegular = new RegExp( ExpresionRegular_Str );

  //Retorna
  if (a_objeto.type == "select-one") {
    return( ExpresionRegular.test( a_objeto.options[a_objeto.selectedIndex].value ) );
  }
  else if (a_objeto.type == "select-multiple") {
    return( ExpresionRegular.test( a_objeto.options[a_objeto.selectedIndex].value ) );
  }
  else
    return( ExpresionRegular.test( a_objeto.value ) );
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida si un numero es entero
function IsValid_NumberReal( a_objeto ) {
  //Vacio
  if( IsValid_Empty( a_objeto ) )  return( false );

  //Strings de expresiones regulares
  var ExpresionRegular_Str = "^-?(([0-9]+)|([0-9]{1,3}(\\[0-9][0-9][0-9])*))$"

  //Objetos expresiones regulares
  var ExpresionRegular = new RegExp( ExpresionRegular_Str );

  //Retorna
  if (a_objeto.type == "select-one") {
    return( ExpresionRegular.test( a_objeto.options[a_objeto.selectedIndex].value ) );
  }
  else if (a_objeto.type == "select-multiple") {
    return( ExpresionRegular.test( a_objeto.options[a_objeto.selectedIndex].value ) );
  }
  else
    return( ExpresionRegular.test( a_objeto.value ) );
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida si un numero es entero
function IsValid_Money( a_objeto ) {
  //Vacio
  if( IsValid_Empty( a_objeto ) )  return( false );

  //Strings de expresiones regulares
  var ExpresionRegular_Str = "^[0-9]+(["+ VAL_SEPARADOR_MILES +"|"+ VAL_SEPARADOR_DECIMALES +"|/]?([0-9]+)?)$"

  //Objetos expresiones regulares
  var ExpresionRegular = new RegExp( ExpresionRegular_Str );

  //Retorna
  if (a_objeto.type == "select-one") {
    return( ExpresionRegular.test( Trim(a_objeto.options[a_objeto.selectedIndex].value) ) );
  }
  else if (a_objeto.type == "select-multiple") {
    return( ExpresionRegular.test( Trim(a_objeto.options[a_objeto.selectedIndex].value) ) );
  }
  else
    return( ExpresionRegular.test( Trim(a_objeto.value) ) );
}


//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida si es una fecha valida
function IsValid_Date( a_objeto ) {
  //Vacio
  if( IsValid_Empty( a_objeto ) )  return( false );

  //Strings de expresiones regulares
  var meses                = "01|02|03|04|05|06|07|08|09|10|11|12";
  var dias                 = "01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31";
  var ExpresionRegular_Str = "^("+dias+")\(\/)("+meses+")\(\/)[0-9][0-9][0-9][0-9]$"


  //Objetos expresiones regulares
  var ExpresionRegular = new RegExp( ExpresionRegular_Str );

  //Evaluar expresiones
  var resultado;
  var valorObjeto;
  var largoObjeto;

  if (a_objeto.type == "select-one") {
    resultado = ExpresionRegular.test( a_objeto.options[a_objeto.selectedIndex].text );
    valorObjeto = a_objeto.options[a_objeto.selectedIndex].text;
    largoObjeto = valorObjeto.length;
  }
  else if (a_objeto.type == "select-multiple") {
    resultado = ExpresionRegular.test( a_objeto.options[a_objeto.selectedIndex].text );
    valorObjeto =a_objeto.options[a_objeto.selectedIndex].text;
    largoObjeto = valorObjeto.length;
  }
  else {
    resultado = ExpresionRegular.test( a_objeto.value );
    valorObjeto = a_objeto.value;
    largoObjeto = valorObjeto.length;
  }

  if ( resultado ){
    var largo= largoObjeto;
    var dia  = valorObjeto.substr(0,2);
    var mes  = valorObjeto.substr(3,2);
    var anno = valorObjeto.substr(largo-4,4);
    if (mes == "02") {
      //Si es divisible por 4 y no por 100 a no ser que
      //          sea div por 400 -> 29 2000 si 1900 no
      var bisiesto = (((anno%4 == 0) & (anno%100 != 0)) | (anno%400 == 0))?true:false;
      resultado = (bisiesto)?(eval(dia+"<30")):(eval(dia+"<29"))
    }
    //Revisa los dias 31 del mes
    else if (dia=="31" && ( (eval(mes+"<8")) && (mes%2==0) || (eval(mes+">7")) && (mes%2==1)))
      resultado = false;
  }

  if (Number(anno)<1900)
    resultado = false

  //Retorna
  return( resultado );
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida que el texto ingresado tenga caracteres permitidos
function IsValid_CaracteresPermitidos( a_objeto ) {
  //Vacio
  if( IsValid_Empty( a_objeto ) )  return( false );
  var contieneCaracteresNoValidos = false;

  //Strings de expresiones regulares
  var ExpresionRegular_Str = "("+ CARACTERES_NO_VALIDOS +")";

  //Objetos expresiones regulares
  var ExpresionRegular = new RegExp( ExpresionRegular_Str );

  //Retorna
  if (a_objeto.type == "select-one") {
    contieneCaracteresNoValidos = ExpresionRegular.test( a_objeto.options[a_objeto.selectedIndex].value);
  }
  else if (a_objeto.type == "select-multiple") {
    contieneCaracteresNoValidos = ExpresionRegular.test( a_objeto.options[a_objeto.selectedIndex].value);
  }
  else
    contieneCaracteresNoValidos = ExpresionRegular.test( a_objeto.value );
    
  if(contieneCaracteresNoValidos){
    return false;
  }
  else{
    return true;
  }
}

//----------------------------------------------------------------------------------------------------------------
// VALIDA RUT
function chequeaRut(obj_rut){
  var texto = obj_rut.value;
  var rut_limpio = "";
  var strMsgErr = "";

  // Le quita los ptos, espacios  y raya (12.345.678-9 => 123456789)
  for ( i=0; i < texto.length ; i++ )
    if ( texto.charAt(i) != ' ' && texto.charAt(i) != '.' && texto.charAt(i) != '-' )
      rut_limpio = rut_limpio + texto.charAt(i);
  texto = rut_limpio;
  largo = texto.length;

  // Descarta los ceros al inicio del rut (0010 => 10)
  for ( i=0; texto.charAt(i) == '0' ; i++ );
  texto = texto.substring(i, texto.length);
  largo = texto.length;

  // Verifica el largo minimo (minimo 2 caracteres)
  if ( largo < 2 ){
    strMsgErr = " - El RUT debe tener por lo menos 2 caracteres\n";
    obj_rut.focus();
    obj_rut.select();
    return strMsgErr;
  }

  // Verifica caracteres validos [1234567890kK)
  for (i=0; i < largo ; i++ ){
    if ( texto.charAt(i) !="0" && texto.charAt(i) != "1" && texto.charAt(i) !="2" && texto.charAt(i) != "3" && texto.charAt(i) != "4" && texto.charAt(i) !="5" && texto.charAt(i) != "6" && texto.charAt(i) != "7" && texto.charAt(i) !="8" && texto.charAt(i) != "9" && texto.charAt(i) !="k" && texto.charAt(i) != "K" ){
      strMsgErr = " - El valor ingresado no corresponde a un RUT valido\n";
      obj_rut.select();
      obj_rut.focus();
      return strMsgErr;
    }
  }

  // Invierte el rut
  var invertido = "";
  for ( i=(largo-1),j=0; i>=0; i--,j++ )
    invertido = invertido + texto.charAt(i);

  // Formatea el rut con separador de miles y el guion
  var dtexto = "";
  dtexto = invertido.charAt(0) + '-';
  cnt = 0;
  for ( i=1,j=2; i<largo; i++,j++ ){
    if ( cnt == 3 ){
      dtexto = dtexto + '.';
      j++;
      dtexto = dtexto + invertido.charAt(i);
      cnt = 1;
    }
    else{
      dtexto = dtexto + invertido.charAt(i);
      cnt++;
    }
  }

  // Invierte el rut invertido ( o sea lo deja ok)
  invertido = "";
  for ( i=(dtexto.length-1),j=0; i>=0; i--,j++ )
    invertido = invertido + dtexto.charAt(i);

  obj_rut.value = invertido;

  // Verifica el digito verificador
  if ( !chequeaDV(texto) ){
    strMsgErr = " - El RUT es incorrecto\n";
    obj_rut.focus();
    obj_rut.select();
    return strMsgErr;
  }
  //si el rut es valido retorna un strMsgErr vacio
  return strMsgErr;
}


//----------------------------------------------------------------------------------------------------------------
//si rut esta ok retorna true, sino false
function chequeaDV( crut ){
  largo = crut.length;

  if ( largo > 2 )
    rut_sin_dv = crut.substring(0, largo - 1);
  else
    rut_sin_dv = crut.charAt(0);
  dv = crut.charAt(largo-1);

  if ( rut_sin_dv == null || dv == null )
    return false;

  var dvr = '0';

  suma = 0;
  mul  = 2;

  for (i= rut_sin_dv.length -1 ; i >= 0; i--){
    suma = suma + rut_sin_dv.charAt(i) * mul;
    if (mul == 7)
      mul = 2;
    else
      mul++;
  }


  res = suma % 11;
  if (res==1)
    dvr = 'k';
  else if (res==0)
    dvr = '0';
  else{
    dvi = 11-res;
    dvr = dvi + "";
  }

  if ( dvr != dv.toLowerCase() ){
    //rut mal
    return false;
  }

  //rut ok
  return true;
}

//----------------------------------------------------------------------------------------------------------------
// Objeto    : oNumero
// Autor     : Mario Soto Carriez, 10/04/2006 
// Link Ayuda: http://javascript.espaciolatino.com/scripts/formateanum.htm
//El n�mero: 12345              --> "El n�mero: " + numero.valor
//Formateado queda: 12,345.00   --> numero.formato(2, true)
//Pues le hemos indicado que formatee el n�mero 12345 con 2 decimales y separador de miles.
//  En muchas ocasiones hemos necesitado formatear un n�mero para qe se presente en pantalla con un cierto n�mero de decimales o con los separadores de miles. Este objeto n�mero permite hacer esto. 
//  Para hcer esto usamos un objeto oNumero con dos propiedades y dos m�todos. 
//  Las propiedades son valor y dec. La primera es donde se almacena el valor num�rico propiamente dicho, mientras que la segunda se usa para indicar que el n�mero tiene posiciones decimales. 
//  Los m�todos son: ponValor() y formato(). El primero sencillamente pone el valor num�rico partiendo de una cadena, mientras el segundo coloca los puntos decimales y los separadores de miles, 
//  para ello necesita dos argumentos: uno indicando el n�mero de decimales que deseamos visualizar y otro para indicar si queremos que aparezcan los separadores de miles. 
function oNumero(numero)
{
  //Propiedades
  this.valor = numero || 0
  this.dec = -1;
  //M�todos
  this.formato = numFormat;
  this.ponValor = ponValor;
  //Definici�n de los m�todos
  function ponValor(cad)
  {
    if (cad =='-' || cad=='+') return
    if (cad.length ==0) return
    if (cad.indexOf('.') >=0)
      this.valor = parseFloat(cad);
    else
      this.valor = parseInt(cad);
  }
  function numFormat(dec, miles)
  {
    var num = this.valor, signo=3, expr;
    var cad = ""+this.valor;
    var ceros = "", pos, pdec, i;
    for (i=0; i < dec; i++)
      ceros += '0';
    pos = cad.indexOf('.')
    if (pos < 0)
      cad = cad+"."+ceros;
    else
    {
      pdec = cad.length - pos -1;
      if (pdec <= dec)
      {
        for (i=0; i< (dec-pdec); i++)
          cad += '0';
      }
      else
      {
        num = num*Math.pow(10, dec);
        num = Math.round(num);
        num = num/Math.pow(10, dec);
        cad = new String(num);
      }
    }
    pos = cad.indexOf('.')
    if (pos < 0) pos = cad.lentgh
    if (cad.substr(0,1)=='-' || cad.substr(0,1) == '+')
      signo = 4;
    if (miles && pos > signo)
      do{
        expr = /([+-]?\d)(\d{3}[\.\,]\d*)/
        cad.match(expr)
        cad=cad.replace(expr, RegExp.$1+','+RegExp.$2)
      }
      while (cad.indexOf(',') > signo)
    if (dec<=0) cad = cad.replace(/\./,'')

    var newcad = cad.replace(/\./g,'~'); //reemplaza el "." por "~"
    newcad = newcad.replace(/\,/g,VAL_SEPARADOR_MILES); //reemplaza la "," por SEPARADOR_MIL
    newcad = newcad.replace(/\~/g,VAL_SEPARADOR_DECIMALES); //reemplaza la "~" por SEPARADOR_DECIMAL
    return newcad;
  }
}//Fin del objeto oNumero:

//----------------------------------------------------------------------------------------------------------------
//Descripcion: calcula el digito verificador
function verificaDV(iRut){
  var digit
  var ind
  var Lar
  var Suma
  var RutAux
  var DigCal
  var fac

  DigCal=""
  RutAux=iRut
  Lar=RutAux.length
  if (Lar < 9) {
    var Cad="000000000"
    RutAux= Cad.substr(1, 9 - Lar) + RutAux
  }
  fac="432765432"
  Suma=0
  ind=9
  while (ind >1) {
    Pa= RutAux.substr(ind - 1 ,1);
    Pb=fac.substr(ind - 1,1);
    Suma = parseFloat(Suma) + (parseFloat(Pa) * parseFloat(Pb))
    ind = ind - 1
  }
  digit = 11 - (Suma -   parseInt(Suma / 11) * 11)
  if (digit==10) {
    DigCal="K"
  }
  if (digit != 10) {
    if (digit == 11) {
      DigCal=0
    }
    if (digit != 11) {
      DigCal=(digit)
    }
  }
  return (DigCal)
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida si un Rut es valido
function IsValid_Rut(ObjRut,ObjDV){
  //si es vacio retorno (esta linea es para cuando el campo no es obligatorio, o si su obligatoriedad se valida en validacion tradicional)
  if (ObjRut.value=="") {
    return(true)
  }
  if (ObjDV) {
    dv = ObjDV.value
  } else {
    dv = "";
  }

  var rutSinDV = RTrim(LTrim(ObjRut.value));
  var rutSinDVSinModificar = rutSinDV;
  var rut = RTrim(LTrim(ObjRut.value + "" + dv));

  //Le quito espacios, puntos y guion
  var er = new RegExp()
  er = / |-|\./ig;
  rut = rut.replace(er, "");
  rutSinDV = rutSinDV.replace(er, "");
	
  //valida que el largo del rut sea mayor a 2 digitos digitos, incluyendo el digito Verificador
  if (rut.length < 2) return(false)
	
  //separo el ultimo digito del resto asumiendo que es el Digito Verificador
  var DV = rut.substring(rut.length - 1, rut.length)
  //Si el �ltimo digito no es un numero, imagino que es una k, la transformo en mayuscula
  if (isNaN(DV)) DV = DV.toUpperCase()
  var parteNumerica = rut.substring(0,rut.length - 1)
	
  if (verificaDV(parteNumerica)==DV){
    if(ObjDV){
      ObjRut.value = rutSinDVSinModificar;
    } else {
      ObjRut.value = parteNumerica+"-"+DV;
    }
    
    return(true)
  }
  else {
    return(false)
  }
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida si un Rut es valido
function ValidaRutConAlert(ObjRut){
  //si es vacio retorno (esta linea es para cuando el campo no es obligatorio, o si su obligatoriedad se valida en validacion tradicional)
  if (ObjRut.value=="") {
    return(true)
  }

  //obtiene valor del objeto
  var rut = ObjRut.value

  //Le quito espacios, puntos y gui�n
  var er = new RegExp()
  er = / |-|\./g;
  rut = rut.replace(er, "")

  //separo el ultimo digito del resto asumiendo que es el Digito Verificador
  var DV = rut.substring(rut.length - 1, rut.length)

  //Si el �ltimo digito no es un numero, imagino que es una k, la transformo en mayuscula
  if (isNaN(DV)) DV = DV.toUpperCase()
  var parteNumerica = rut.substring(0,rut.length - 1)

  if (verificaRut(parteNumerica)==DV){
    ObjRut.value = rut;
    return(true)
  }
  else {
    ObjRut.focus();
    alert("El rut ingresado es incorrecto")
    return(false)
  }
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Recibe el string de un rut y lo formatea con un guion: Recibe:12345678k -> Retorna: 12345678-k
function formateaRUT(a_Rut){
  var largoRut = a_Rut.length;
  var rut = a_Rut.value;
  //separo el ultimo digito del resto asumiendo que es el Digito Verificador
  var DV = rut.substring(rut.length - 1, rut.length)

  //Si el �ltimo digito no es un numero, imagino que es una k, la transformo en mayuscula
  if (isNaN(DV)) DV = DV.toUpperCase()
  var parteNumerica = rut.substring(0,rut.length - 1)

  var newRUT = parteNumerica + "-" + DV;
  return newRUT;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Recibe el string de un rut y lo formatea con un guion: Recibe:12345678k -> Retorna: 12345678-k
function IsValid_IndiceMes(a_objeto){
  //valida si es Vacio
  if(IsValid_Empty(a_objeto)) return(false);
  //valida si es el valor es numerico
  if(!IsValid_NumberInt(a_objeto)) return(false);
  //obtiene valor del objeto
  var valor=parseInt(a_objeto.value * 1);//se multiplica por 1 para que el valor ingresado lo tome como numerico
  if(valor>=1 && valor<=12){
    return true;
  }
  else{
    return false;
  }
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: verifica que el archivo sea un excel o csv (verifica si existe la extension .xls o .csv en el nombre del archivo)
function IsValid_ArchivoExcel(a_objeto){
  //valida si es Vacio
  if(IsValid_Empty(a_objeto)) return(false);
  //obtiene el valor
  var pathFile = a_objeto.value;
  //separa el nombre del archivo por cada punto(.) que encuentre y lo deja en un arreglo
  var arrSplit = pathFile.split(".");
  //obtiene largo del arreglo
  var largo = arrSplit.length;
  //verifica si el ultimo valor del arreglo es "xls"
  if( (arrSplit[largo-1].toUpperCase()=="XLS") || (arrSplit[largo-1].toUpperCase()=="CSV") ){
    return true;
  }
  else{
    return false;
  }
}

//------------------------------------------------------------------------------------
//Descripcion: verifica el ancho de la imagen y si lo sobrepasa entonces lo redimensiona
//Por        : VSR, 01/01/2011
function verificaAncho(objImg, anchoMax){
  var ancho = objImg.width
  if (ancho > anchoMax)
    objImg.width = anchoMax
}

//------------------------------------------------------------------------------------
//Descripcion : valida la conexion del servidor
//Por         : VSR, 01/01/2011
function validarConexionServidor(){
  var msgError = "";
  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      msgError = " - El servidor no responde. Intente realizar el proceso en unos instantes\n";
    }
    else if (respuesta == CONST_CODIGO_SIN_CONEXION) {
      msgError = " - Tiene problema con su acceso a internet. Verificar por favor y luego realice nuevamente el proceso\n";
    }
  }
  var errFunc = function(t) {
    msgError = " - El servidor no responde. Intente realizar el proceso en unos instantes\n";
  }
  jQuery.ajax({
    url: "index.php",
    type: "get",
    async: false,
    data: null,
    success: okFunc,
    error: errFunc
  });   
  return msgError;
}

//------------------------------------------------------------------------------------
//Descripcion : valida la conexion del servidor
//Por         : VSR, 01/01/2011
function IsValid_ConexionServidor(){
  var mensaje = validarConexionServidor();
  if(mensaje==""){
    return true;
  }
  else{
    return false;
  }
}

//------------------------------------------------------------------------------------
//Descripcion : valida el largo del string
//Por         : VSR, 01/01/2011
function IsValid_LargoTexto(s, minimo, maximo){
  if(maximo=="") maximo = 0;
  s = RTrim(LTrim(s));

  if(minimo < 1) minimo = s.length;
  if(maximo < 1) maximo = s.length;

  return tieneLargoValido(s.length, minimo, maximo);
}

//------------------------------------------------------------------------------------
//Descripcion : valida si tiene rango valido
//Por         : VSR, 01/01/2011
function tieneLargoValido(n, minimo, maximo){
  if(n>=minimo && n<=maximo)
    return true;
  else
    return false;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: determina que tipo de archivo es el archivo
function EsTipoArchivo(nombreArchivo){
  //obtiene la extension del archivo
  var extension = obtenerExtensionArchivo(nombreArchivo);
  //obtiene el tipo de archivo asociado a la extension
  tipoArchivo = obtenerTipoArchivo(extension);
  //retorna valor
  return tipoArchivo;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida si el archivo es de tipo imagen
function IsValid_FileImage(a_objeto){
  //Vacio
  if( IsValid_Empty( a_objeto ) )  return false;
  //obtiene valor del control
  var file = a_objeto.value;
  //obtiene la extension del archivo
  var extension = obtenerExtensionArchivo(file);
  //obtiene el tipo de archivo asociado a la extension
  tipoArchivo = obtenerTipoArchivo(extension);

  //determina si es un tipo imagen o no
  if(tipoArchivo =="image"){
    return true;
  }
  else{
    return false;
  }
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Verifica si un string contiene caracteres invalidos
function contieneCaracteresInvalidos( texto ) {
  //Vacio
  if( Trim(texto)=="" )  return( false );
  var tieneCaracteresInvalidos = false;

  //Strings de expresiones regulares
  var ExpresionRegular_Str = "("+ CARACTERES_NO_VALIDOS +")";

  //Objetos expresiones regulares
  var ExpresionRegular = new RegExp( ExpresionRegular_Str );

  //Retorna
  tieneCaracteresInvalidos = ExpresionRegular.test( texto );
    
  if(tieneCaracteresInvalidos){
    return true;
  }
  else{
    return false;
  }
}

//------------------------------------------------------------------
//Descripcion : quita los caracteres invalidos de un string
//Por         : VSR, 01/01/2011
function limpiarCaracteresInvalidos(texto,idObjTexto){
  var textoLimpio;
  var expRegular;
  var objTexto = document.getElementById(idObjTexto);
  
  //si se envia un control entonces obtiene el valor desde ahi
  if(objTexto){
    texto = objTexto.value;
  }

  if(Trim(texto)==""){
    textoLimpio = "";
  }
  else{
    //si no contiene caracteres invalidos devuelve el texto original
    if(!contieneCaracteresInvalidos(texto)){
      textoLimpio = texto;
    }
    //limpia los caracteres invalidos
    else{
      var aCaracteresInvalidos = CARACTERES_NO_VALIDOS.split("|");
      for(var i=0; i<aCaracteresInvalidos.length; i++){
        caracterInvalido = aCaracteresInvalidos[i];
        expRegular = "/"+ caracterInvalido +"/g";
        texto = texto.replace(eval(expRegular),"");
      }
      textoLimpio = texto;
    }
  }
  //retorna valor
  if(objTexto){
    objTexto.value = textoLimpio;
  }
  return textoLimpio;
}


//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida que un struing con email sean validos
function IsValid_ListadoEmail(a_objeto){
  //Vacio
  if( IsValid_Empty( a_objeto ) )  return( false );
  var listado = a_objeto.value;
  var esValido = true;
  listado = listado.replace(",",";");
  var aListado = listado.split(";");

  for(var i=0; i<=aListado.length-1; i++){
    var email = Trim(aListado[i]);
    if(!IsValid_TextoEmail(email)){
      esValido = false;
      break;
    }
  }
  return esValido;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: Valida que el texto ingresado tenga letras minusculas, mayusculas y/o numeros
function IsValid_AlphaNumerico(a_objeto) {
  //Vacio
  if (IsValid_Empty(a_objeto)) return (false);
  var contieneCaracteresValidos = false;

  //Strings de expresiones regulares
  var ExpresionRegular_Str = "^[a-zA-Z0-9]+$";

  //Objetos expresiones regulares
  var ExpresionRegular = new RegExp(ExpresionRegular_Str);

  //Retorna
  if (a_objeto.type == "select-one") {
    contieneCaracteresValidos = ExpresionRegular.test(a_objeto.options[a_objeto.selectedIndex].value);
  }
  else if (a_objeto.type == "select-multiple") {
    contieneCaracteresValidos = ExpresionRegular.test(a_objeto.options[a_objeto.selectedIndex].value);
  }
  else
    contieneCaracteresValidos = ExpresionRegular.test(a_objeto.value);

  return contieneCaracteresValidos;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida si objeto es array
function is_array(input){
    return typeof(input)=='object'&&(input instanceof Array);
}
